// zdl:: 这道题目会让我们选哪个岛谈心，但是谈心可以被证明是一种错误的答案

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 5e4 + 10;
int a[N];
int l[N], r[N];
int main()
{
    int n, k;
    cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> a[i];
    sort(a + 1, a + 1 + n);
    // 现在先来预处理得到在左右两边上的
    for (int left = 1, right = 1; right <= n; right++)
    {
        while (a[right] - a[left] > k) left ++;
        // zdl: 好看吧好像确实是这个道理
        l[right] = max(l[right - 1], right - left + 1);
    }
    for (int left = n, right = n; left >= 1; left--)
    {
        while (a[right] - a[left] > k) right--;
        // zld:: 现在还有一点不能正式的一点就是这个原理
        r[left] = max(r[left + 1], right - left + 1);
    }

    // zdl:: 接下来就是开始枚举左右端点
    int ret = 0;
    for (int i = 2; i < n; i++)
    {
        ret = max(ret, l[i] + r[i + 1]);
    }

    cout << ret << endl;
    return 0;
}


// 现在还是要抽时间写一下博客才行，现在的博客属于是我完全没写的状态

